package cn.tedu.block;

import org.junit.jupiter.api.Test;

/*本类用来测试代码块之间的消息*/
public class TestBlock {
    @Test
    public void test() {
        /*1在创建对象之前，会先自动执行静态代码块，而且此静态代码块只执行一次
         * 2.每一次创建对象时都会调用构造代码块与构造方法，构造代码块先执行*/
        Person p = new Person();
        Person p2 = new Person();
        /*当对象调用方法时，如果方法有局部代码块局部代码块才会触发*/
        p.sleep();
        p.eat();

    }
}

class Person {
    /*静态代码块
     * 位置  类里方法外
     * 触发时机：静态代码块也是静态资源，随着类的加载而加载，优先于对象加载
     * 作用 ：用于专门完成一些需要第一时间加载的资源*/
    static {
        System.out.println("我是静态代码块");

    }

    /*构造代码块
     * 位置           类里方法外
     * 触发时机    创建对象时触发，优先与构造方法执行
     * 作用            提取构造方法中的共性内容*/ {

    }
    /*构造方法与类同名。且没有返回值类型，用于创建对象，在创建对象时触发*/

    public Person() {
        System.out.println("我是构造方法");
    }

    public void eat() {
        System.out.println("哈雷路亚");
    }

    /*局部代码块
     * 调用本方法时触发
     * 用来控制变量的控制范围变量的范围越来越好*/ {
        System.out.println("我是局部代码块");
    }

    public void sleep() {
        System.out.println("acc");
    }
}